/* eslint-disable no-undef */
/*
 * @Description: 公共方法
 * @Version: 1.0.0
 * @Autor: hch
 * @Date: 2021-07-22 00:01:09
 */
/**
 * @description: 绘制正方形（可以定义圆角），并且有图片地址的话填充图片
 * @param {CanvasContext} ctx canvas上下文
 * @param {number} x 圆角矩形选区的左上角 x坐标
 * @param {number} y 圆角矩形选区的左上角 y坐标
 * @param {number} w 圆角矩形选区的宽度
 * @param {number} h 圆角矩形选区的高度
 * @param {number} r 圆角的半径
 * @param {String} url 图片的url地址
 */
export function drawSquarePic(ctx, x, y, w, h, r, url,name,getHint,resultTitle) {
	console.log(name,getHint,resultTitle,"7777777"),
	// 保存 canvas 状态
	ctx.save();
	ctx.beginPath();

	// 绘制左上角圆弧
	ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5);

	// 绘制上边框
	ctx.lineTo(x + w - r, y);

	// 绘制右上角圆弧
	ctx.arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2);

	// 绘制右边框
	ctx.lineTo(x + w, y + h - r);

	// 绘制右下角圆弧
	ctx.arc(x + w - r, y + h - r, r, 0, Math.PI * 0.5);

	// 绘制左下角圆弧
	ctx.arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI);

	// 绘制左边框
	ctx.lineTo(x, y + r);

	// 填充背景颜色
	ctx.setFillStyle('#ffffff'); // 可以根据需要更改背景颜色
	ctx.fill();

	// 如果提供了图片 URL
	if (url) {
		// 使用uni.getImageInfo获取图片信息
		uni.getImageInfo({
			src: url,
			success: function(res) {
				const imagePath = res.path;

				// 使用 Canvas API 绘制图片
				ctx.drawImage(imagePath, x, y, w, h);
				drawTextReturnH(ctx, resultTitle, x + w / 2, y + h / 2, w - 40, 24, '#805D33', -70);
				// 在图片上绘制文本
				// 水平居中，垂直偏移为 20 像素
				drawTextReturnH(ctx, name, x + w / 2, y + h / 2, w - 40, 38, '#805D33', -30);

				// 水平居中，垂直偏移为 -30 像素
				drawTextReturnH(ctx, '超越了30%的人', x + w / 2, y + h / 2, w - 40, 14, '#808080', 70);
				// 水平居中，垂直偏移为 -30 像素
				drawTextReturn(ctx, getHint, x + w / 2, y +
					h / 2, w - 60, 10, '#805D33', 140);
				// 强制刷新 canvas
				ctx.draw(true); // 这个调用需要放在图片和文本都绘制之后
			},
			fail: function(err) {
				console.error('图片加载失败:', err);
			}
		});
	}

	// 恢复 canvas 状态
	ctx.restore();
}


function drawTextReturn(ctx, text, x, y, maxWidth, fontSize, color, verticalOffset = 0) {
	ctx.setFillStyle(color);
	ctx.setFontSize(fontSize);

	const lineHeight = fontSize * 1.5; // 行高
	const arrText = text.split(''); // 将文本拆分成单个字符
	let line = '';
	let totalHeight = 0; // 记录总的文本高度，用于垂直对齐

	// 计算文本的行数和总高度
	for (let n = 0; n < arrText.length; n++) {
		let testLine = line + arrText[n];
		let metrics = ctx.measureText(testLine); // 获取文本宽度
		let testWidth = metrics.width;

		// 如果超出最大宽度，则换行
		if (testWidth > maxWidth && n > 0) {
			line = arrText[n]; // 新的一行开始
			totalHeight += lineHeight; // 增加行高
		} else {
			line = testLine;
		}
	}

	// 加入最后一行的高度
	totalHeight += lineHeight;

	// 计算文本的水平居中位置
	const centerX = x - maxWidth / 2;

	// 调整垂直位置
	y += verticalOffset;

	line = ''; // 清空 line 以重新开始绘制文本

	// 绘制文本
	for (let n = 0; n < arrText.length; n++) {
		let testLine = line + arrText[n];
		let metrics = ctx.measureText(testLine); // 获取文本宽度
		let testWidth = metrics.width;

		// 如果超出最大宽度，则换行
		if (testWidth > maxWidth && n > 0) {
			// 绘制当前行，并换行
			ctx.fillText(line, centerX, y);
			line = arrText[n]; // 新的一行开始
			y += lineHeight; // 换行
		} else {
			line = testLine;
		}
	}

	// 绘制最后一行文本（水平居中）
	ctx.fillText(line, centerX, y);
}







function drawTextReturnH(ctx, text, x, y, maxWidth, fontSize, color, verticalOffset = 0) {
	ctx.setFillStyle(color);
	ctx.setFontSize(fontSize);

	const lineHeight = fontSize * 1.5; // 行高
	const arrText = text.split(''); // 将文本拆分成单个字符
	let line = '';
	let totalHeight = 0; // 记录总的文本高度，用于垂直对齐

	// 计算文本的行数和总高度
	for (let n = 0; n < arrText.length; n++) {
		let testLine = line + arrText[n];
		let metrics = ctx.measureText(testLine); // 获取文本宽度
		let testWidth = metrics.width;

		// 如果超出最大宽度，则换行
		if (testWidth > maxWidth && n > 0) {
			line = arrText[n]; // 新的一行开始
			totalHeight += lineHeight; // 增加行高
		} else {
			line = testLine;
		}
	}

	// 加入最后一行的高度
	totalHeight += lineHeight;

	// 计算文本的水平居中位置
	const centerX = x - ctx.measureText(text).width / 2;

	// 调整垂直位置
	y += verticalOffset;

	line = ''; // 清空 line 以重新开始绘制文本

	// 绘制文本
	for (let n = 0; n < arrText.length; n++) {
		let testLine = line + arrText[n];
		let metrics = ctx.measureText(testLine); // 获取文本宽度
		let testWidth = metrics.width;

		// 如果超出最大宽度，则换行
		if (testWidth > maxWidth && n > 0) {
			// 绘制当前行，并换行
			ctx.fillText(line, centerX, y);
			line = arrText[n]; // 新的一行开始
			y += lineHeight; // 换行
		} else {
			line = testLine;
		}
	}

	// 绘制最后一行文本（水平居中）
	ctx.fillText(line, centerX, y);
}



/**
 * @description: 获取设备信息
 * @param {type}
 * @return {type}
 * @author: hch
 */
export function getSystem() {
	let system = wx.getSystemInfoSync();
	let scale = system.windowWidth / 375; // 按照苹果留 375*667比例 其他型号手机等比例缩放 显示
	return {
		w: system.windowWidth,
		h: system.windowHeight,
		scale
	};
}

/**
 * @description: 绘制文本时文本的总体高度
 * @param {Object} ctx canvas上下文
 * @param {String} text 需要输入的文本
 * @param {Number} x X轴起始位置
 * @param {Number} y Y轴起始位置
 * @param {Number} maxWidth 单行最大宽度
 * @param {Number} fontSize 字体大小
 * @param {String} color 字体颜色
 * @param {Number} lineHeight 行高
 * @param {String} textAlign 字体对齐方式
 */